home *** CD-ROM | disk | FTP | other *** search
/ Revista CD Expert 37 / CD Expert nº 37.iso / LastCall / lastcall.exe / stuff / lastcall.dxr / 00095_Shaker Behavior.ls < prev    next >
Encoding:
Text File  |  2000-03-27  |  7.2 KB  |  335 lines

  1. property pSpr, pOrigMember, pLidUpMember, pNoShadow, pPouring, pDragMember, pContents, pContentString, pGlassMask, pGlassIce, pIceAmount, pMaxIceIncrements, pLidUpNoIceMember, pLidUpWithIceMember, pThingName, pTilt, pCapacity, pIcePerScoop, pLidUp, pLidTimer, pLastDest, pGlassType, pFirstShake, pLastShake, pOverItem, pTimer, pShaken
  2. global gFloatSprite
  3.  
  4. on beginSprite me
  5.   pGlassType = #shaker
  6.   pSpr = sprite(me.spriteNum)
  7.   pOrigMember = pSpr.member
  8.   pGlassIce = pSpr
  9.   pGlassMask = pSpr
  10.   pDragMember = nextMember(pSpr.member, 1)
  11.   pLidUpNoIceMember = nextMember(pSpr.member, -1)
  12.   pLidUpWithIceMember = nextMember(pSpr.member, -2)
  13.   pNoShadow = nextMember(pSpr.member, -3)
  14.   pCapacity = getCapacity(pGlassType)
  15.   pMaxIceIncrements = 1
  16.   pIcePerScoop = pCapacity / (2.0 * pMaxIceIncrements)
  17.   mEmptyGlass(me)
  18.   pLidUp = 0
  19.   pOverItem = 0
  20.   mReplaceIt(me)
  21. end
  22.  
  23. on mSetNewTilt me, newTilt
  24.   pTilt = newTilt
  25.   if pTilt = #right then
  26.     pDragMember = nextMember(pOrigMember, 1)
  27.   else
  28.     pDragMember = nextMember(pOrigMember, 11)
  29.   end if
  30.   return pDragMember
  31. end
  32.  
  33. on mEmptyGlass me
  34.   global gLastVessel
  35.   if gLastVessel = pGlassType then
  36.     setPourClockText(" The Shaker is Empty")
  37.   end if
  38.   pIceAmount = 0
  39.   pContents = [:]
  40.   pContentString = EMPTY
  41.   pLastDest = VOID
  42.   pLidUpMember = pLidUpNoIceMember
  43. end
  44.  
  45. on mEmptyIfLastVessel me, barGlassSprite
  46.   if pLastDest = barGlassSprite then
  47.     mEmptyGlass(me)
  48.   end if
  49. end
  50.  
  51. on mReplaceTop me
  52.   if pLidUp or (pSpr.member <> pOrigMember) then
  53.     pLidUp = 0
  54.     pLidTimer = VOID
  55.     soundFX2("shaker_top_on", 0, 0)
  56.     pSpr.member = pOrigMember
  57.   end if
  58. end
  59.  
  60. on mPopTop me, Force
  61.   if not pLidUp then
  62.     if not Force then
  63.       if voidp(pLidTimer) then
  64.         pLidTimer = nowTicks()
  65.         exit
  66.       else
  67.         if ticksSince(pLidTimer) < 15 then
  68.           exit
  69.         end if
  70.       end if
  71.     end if
  72.     soundFX2("shaker_top_off", 0, 0)
  73.     pSpr.member = pLidUpMember
  74.     pLidUp = 1
  75.     mupdateDisplay(me)
  76.   end if
  77. end
  78.  
  79. on mouseEnter me
  80.   pTimer = nowTicks()
  81.   pOverItem = 1
  82.   pLidTimer = VOID
  83.   if draggingBarTopGlass() then
  84.     exit
  85.   end if
  86.   showToolTip(pSpr, pGlassType)
  87. end
  88.  
  89. on mupdateDisplay me
  90.   global gLastVessel
  91.   gLastVessel = pGlassType
  92.   pContentString = buildVesselContentList(pSpr, pGlassType, " The Shaker is Empty")
  93.   showDrinkContents(pGlassType, pContentString, VOID)
  94. end
  95.  
  96. on mouseWithin me
  97.   if draggingBottleOrSpoon() and not pPouring then
  98.     mPopTop(me)
  99.   else
  100.     if draggingIngredient() then
  101.       pTimer = nowTicks()
  102.     else
  103.       if tipTickRange(pTimer) then
  104.         forceToolTip(pSpr, pGlassType)
  105.         mupdateDisplay(me)
  106.       else
  107.         dismissToolTip()
  108.       end if
  109.     end if
  110.   end if
  111. end
  112.  
  113. on mouseLeave me
  114.   if not pPouring and draggingBottleOrSpoon() then
  115.     mReplaceTop(me)
  116.   end if
  117.   pOverItem = 0
  118.   if not draggingSpoon() then
  119.     hideToolTip()
  120.     hideDrinkContents()
  121.   end if
  122. end
  123.  
  124. on mouseDown me
  125.   if the doubleClick then
  126.     exit
  127.   end if
  128.   if draggingBottleOrSpoon() and not pPouring then
  129.     mPopTop(me, 1)
  130.     if draggingBottleThang() then
  131.       pourIt(mGetReceiveSound(me))
  132.     end if
  133.   else
  134.     if pPouring then
  135.       mReplaceIt(me)
  136.       replaceDraggingAnything()
  137.     else
  138.       replaceDraggingAnything()
  139.       pPouring = 1
  140.       noShaking(me)
  141.       pShaken = 0
  142.       pSpr.member = pOrigMember
  143.       sendSprite(gFloatSprite, #mPickUpBottle, pSpr, 1, VOID, pGlassType, mGetPourSound(me))
  144.       pSpr.member = pNoShadow
  145.       updateStage()
  146.       pPouring = 1
  147.     end if
  148.   end if
  149. end
  150.  
  151. on noShaking me
  152.   pFirstShake = VOID
  153.   pLastShake = VOID
  154. end
  155.  
  156. on mGetReceiveSound me
  157.   if mHasIce(me) then
  158.     soundName = "water_into_shaker_wice"
  159.   else
  160.     soundName = "water_into_shaker"
  161.   end if
  162.   return soundName
  163. end
  164.  
  165. on mGetPourSound me
  166.   if mIsEmpty(me) then
  167.     soundName = VOID
  168.   else
  169.     soundName = "strain_shaker_into_glass"
  170.   end if
  171.   return soundName
  172. end
  173.  
  174. on mIsHoldingVolume me
  175.   return calcContents(pContents)
  176. end
  177.  
  178. on mIsHoldingLiquor me
  179.   return calcLiquorContents(pContents)
  180. end
  181.  
  182. on mIsHoldingLiquid me
  183.   return calcLiquidContents(pContents)
  184. end
  185.  
  186. on mIsHoldingPourable me
  187.   return calcPourableContents(pContents)
  188. end
  189.  
  190. on mIsEmpty me
  191.   return calcEmpty(pContents)
  192. end
  193.  
  194. on mHasIce me
  195.   if voidp(pContents[#ice]) then
  196.     return 0
  197.   else
  198.     return integer(pContents[#ice])
  199.   end if
  200. end
  201.  
  202. on overPourableItem me
  203.   global gPourableItemsList
  204.   repeat with X in gPourableItemsList
  205.     if sendSprite(X, #mOverItem, pSpr, the mouseLoc) and (X <> pSpr.spriteNum) then
  206.       return 1
  207.     end if
  208.   end repeat
  209.   return 0
  210. end
  211.  
  212. on exitFrame me
  213.   global gSoundFX2chan
  214.   if pPouring then
  215.     if overPourableItem(me) or pShaken then
  216.       gFloatSprite.member = pDragMember
  217.       noShaking(me)
  218.       exit
  219.     end if
  220.     if voidp(pFirstShake) then
  221.       pFirstShake = the mouseLoc
  222.     else
  223.       if pLastShake = VOID then
  224.         pLastShake = the mouseLoc
  225.       else
  226.         mousePos = the mouseLoc
  227.         if (pFirstShake[1] < pLastShake[1]) and (mousePos[1] < pLastShake[1]) then
  228.           shaking = 1
  229.         else
  230.           if (pFirstShake[1] > pLastShake[1]) and (mousePos[1] > pLastShake[1]) then
  231.             shaking = 1
  232.           else
  233.             if (pFirstShake[2] < pLastShake[2]) and (mousePos[2] < pLastShake[2]) then
  234.               shaking = 1
  235.             else
  236.               if (pFirstShake[2] > pLastShake[2]) and (mousePos[2] > pLastShake[2]) then
  237.                 shaking = 1
  238.               else
  239.                 shaking = 0
  240.                 noShaking(me)
  241.               end if
  242.             end if
  243.           end if
  244.         end if
  245.       end if
  246.     end if
  247.     if modifierDown() then
  248.       shaking = 1
  249.     end if
  250.     if shaking then
  251.       pShaken = 1
  252.       if mIsEmpty(me) then
  253.       else
  254.         if mHasIce(me) then
  255.           soundFX2("shaking_ice", 1, 0)
  256.         else
  257.           soundFX2("shaking_ice", 1, 0)
  258.         end if
  259.       end if
  260.       oldMember = gFloatSprite.member
  261.       repeat while soundBusy(gSoundFX2chan)
  262.         gFloatSprite.member = member("shake_" & random(6))
  263.         if onPC() then
  264.           gFloatSprite.loc = the mouseLoc
  265.         end if
  266.         checkElapsedTime()
  267.         updateStage()
  268.         wait(2)
  269.       end repeat
  270.       shaking = 0
  271.       noShaking(me)
  272.       mShaken(me)
  273.       gFloatSprite.member = oldMember
  274.       if not overPourableItem(me) then
  275.         gFloatSprite.member = pDragMember
  276.       end if
  277.     else
  278.       stopSoundFX2()
  279.     end if
  280.     if not overPourableItem(me) then
  281.       gFloatSprite.member = pDragMember
  282.     end if
  283.   end if
  284. end
  285.  
  286. on mShaken
  287.   pContents[#shake] = 1
  288. end
  289.  
  290. on mStirred me
  291.   if countStirrableIngredients(pContents) > 1 then
  292.     pContents[#stir] = 1
  293.   end if
  294. end
  295.  
  296. on mOverItem me, bottleSprite, spoutLoc
  297.   if pPouring then
  298.     return 0
  299.   else
  300.     return inside(spoutLoc, pSpr.rect)
  301.   end if
  302. end
  303.  
  304. on mReplaceIt me
  305.   pSpr.visible = 1
  306.   pSpr.member = pOrigMember
  307.   pPouring = 0
  308.   pShaken = 0
  309.   pTilt = #left
  310.   noShaking(me)
  311. end
  312.  
  313. on mFill me, ingredient, liquidColor
  314.   return fillVessel(me, ingredient, liquidColor)
  315. end
  316.  
  317. on mUpdateLiquidLevel me, masterSprite
  318.   mFillLiquor(me, VOID, masterSprite)
  319. end
  320.  
  321. on mFillLiquor me, liquidColor, masterSprite
  322.   return 1
  323. end
  324.  
  325. on mFillIce me, masterSprite
  326.   newMem = VOID
  327.   if pIceAmount > pMaxIceIncrements then
  328.     alertBeep()
  329.     return 0
  330.   end if
  331.   pLidUpMember = pLidUpWithIceMember
  332.   pSpr.member = pLidUpMember
  333.   return addIce(pSpr, masterSprite, pMaxIceIncrements, newMem, "ice_into_shaker1")
  334. end
  335.